package com.xgz.entity;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test4 {
    public static void main(String[] args) {
        Class<Animal> animalClass = Animal.class;
        //获取所有的方法(共有和私有都可以)
        Method[] declaredMethods = animalClass.getDeclaredMethods();
        for (Method declaredMethod : declaredMethods) {
            System.out.println("declaredMethod = " + declaredMethod);
        }
        //操作成员方法
        try {
            Animal animal = animalClass.newInstance();
            Method setName = animalClass.getDeclaredMethod("setName", String.class);
            //方法.invoke(对象，参数值)
            //暴力反射
            setName.setAccessible(true);
            //调用setName方法
            setName.invoke(animal,"test");
            //取值 getName
            Method getName = animalClass.getDeclaredMethod("getName");
            Object invoke = getName.invoke(animal);
            System.out.println("通过get方法取值 name的值是： " + invoke);
            // name属性的值
            Field name = animalClass.getDeclaredField("name");
            //暴力反射
            name.setAccessible(true);
            Object o = name.get(animal);
            System.out.println("通过name属性取值 name的值是：" + o);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
